package com.wgy.day18.多态.多态中成员变量的使用规则;

/*
访问成员变量的方式有两种
 1.直接通过对象名称访问成员变量: 看等号左变是谁,优先用谁,没有则向上找.
 2.间接通过成员方法访问成员变量: 看该方法属于谁,优先用谁,没有则向上找.

 多态中的成员变量是不可以覆盖重写的

* */
public class MultiField {
    public static void main(String[] args) {
        //平常的写法
        Zi zi = new Zi();
        System.out.println(zi.num); //子:20  对象名称访问成员变量: 看等号左变Zi,优先Zi
        zi.showNum();               //父:20  成员方法访问成员变量: 看该方法属Fu,优先Fu

        //多态写法
        //父类引用 指向子类对象
        Fu obj = new Zi();
        System.out.println(obj.num); // 父:10   对象名称访问成员变量: 看等号左变Fu,优先Fu
        //  System.out.println(obj.age); 错误写法 对象名称访问成员变量  看等号左变是谁,优先用谁,
        //                             等号左边是父类,父类里面没有age,父类是不会向下找子类的,只会向上找直接父类object

        obj.showNum();            // 父:10  成员方法访问成员变量: 看该方法属Fu,子类没有对它进行覆盖重新 还是优先Fu
                                  // 如果子类对该方法进行了覆盖重写 那么优先使用子类的

      //  obj.show();               错误写法编译报错  编译看左边,左边是父类 ,父类中没有show方法,所以编译报错
    }
}

